package org.inspiration.dudu.content.service;

import org.inspiration.dudu.content.model.dto.ArticleDTO;
import org.inspiration.dudu.content.model.entity.ArticleEntity;
import org.inspiration.dudu.content.model.vo.ArticleSimpleVO;
import org.inspiration.dudu.content.model.vo.ArticleVO;

import java.util.List;

/**
 * 文章服务接口，提供对文章的基本操作。
 */
public interface ArticleService {
    /**
     * 创建一篇新的文章。
     *
     * @param articleEntity 文章实体
     */
    void createArticle(ArticleEntity articleEntity);

    /**
     * 根据文章ID查找文章。
     *
     * @param id 文章ID
     * @return 文章视图对象
     */
    ArticleVO getArticleById(String id);

    /**
     * 将ArticleDTO转换为ArticleEntity。
     *
     * @param articleDTO      文章数据传输对象
     * @param contentFilePath 内容文件路径
     * @param uuid            唯一标识符
     * @return 文章实体
     */
    ArticleEntity transToEntity(ArticleDTO articleDTO, String contentFilePath, String uuid);

    /**
     * 将ArticleEntity转换为ArticleVO。
     *
     * @param articleEntity 文章实体
     * @return 文章视图对象
     */
    ArticleVO transToVO(ArticleEntity articleEntity);

    /**
     * 获取最近的文章列表。
     *
     * @param pageNum  页码
     * @param pageSize 每页大小
     * @return 最近文章的简单视图对象列表
     */
    List<ArticleSimpleVO> getPublishedArticlesOrderByDESC(int pageNum, int pageSize);

    /**
     * 将ArticleEntity转换为ArticleSimpleVO。
     *
     * @param articleEntity 文章实体
     * @return 文章简单视图对象
     */
    ArticleSimpleVO transToSimpleVO(ArticleEntity articleEntity);
    ArticleSimpleVO transToSimpleVO(ArticleVO articleVO);
    /**
     * 增加文章的点赞数。
     *
     * @param contentId 文章内容ID
     */
    void increaseLikeCount(String contentId);

    /**
     * 减少文章的点赞数。
     *
     * @param contentId 文章内容ID
     */
    void decreaseLikeCount(String contentId);

    /**
     * 根据内容ID获取用户ID。
     *
     * @param contentId 文章内容ID
     * @return 用户ID
     */
    Long getUserIdByContentId(String contentId);

    /**
     * 增加文章的收藏数。
     *
     * @param contentId 文章内容ID
     */
    void increaseFavoriteCount(String contentId);

    /**
     * 减少文章的收藏数。
     *
     * @param contentId 文章内容ID
     */
    void decreaseFavoriteCount(String contentId);

    /**
     * 增加文章的评论数。
     *
     * @param contentId 文章内容ID
     */
    void increaseCommentCount(String contentId);

    List<ArticleSimpleVO> getPublishedArticlesByUserIdOrderByDESC(Long userId, Integer pageNum, Integer pageSize);

    List<ArticleSimpleVO> getDraftArticlesByUserIdOrderByDESC(Long userId, Integer pageNum, Integer pageSize);

    void updateArticle(ArticleEntity articleEntity);

    void updateArticleStatus(String id, String status);

    List<ArticleSimpleVO> getArticlesByUserIdAndKeyWordOrderByDESC(Long userId, String keyWord, Integer pageNum, Integer pageSize);

    List<ArticleSimpleVO> getPublishedArticlesByKeyWordOrderByDESC(String keyWord, Integer pageNum, Integer pageSize);
}
